<script>
    //字符串常用内置函数
    //1、str.chatAt(index):获取指定下标的字符
    console.log('jkdjcsbv'.charAt());  //j  不填下标默认下标为0
    console.log('gsdvksjvb'.charAt(5));  //s
    console.log('shvhs'.charAt(10)); //''   超过最大下标值，返回一个空字符
    //2、str.toLowerCase():将字符串统一转为小写
    console.log('IHBHBkjhjl'.toLowerCase());  //ihbhbkjhjl
    //str.toUpperCase():将字符串统一转为大写
    console.log('vagGHBV'.toUpperCase());  //VAGGHBV
    //3、str.substring(indexStart,indexEnd):截取指定下标范围的字符串，不含末尾下标字符
    console.log('sjhfidslger'.substring(3,6));  //fid
    console.log('jdvkfbk'.substring(2));  //vkfbk  若不写末尾下标，默认截取到最后
    //注：slice也可以，同substring的用法一样
    //4、str.indexOf('字符'):返回字符在字符串中第一次出现的下标，没有则返回-1
    console.log('sviudhvo'.indexOf('i'));  //2
    console.log('hosdhvs3k'.indexOf('dhv'));  //3
    console.log('ggshdisi'.indexOf('z'));  //-1
    //5、str.includes('字符/字符串'):判断str里是否包含'字符/字符串',有返回true，没有返回false
    console.log('jsvkjd'.includes('vk'));  //true
    console.log('bdrbgg'.includes('bag'));  //false
    console.log('hsjhdvk'.includes('i'));  //false
    //6、str.replace('原字符串','目标字符串'):将原字符串替换成目标字符串(返回一个新的字符串)
    console.log('hhoijvns'.replace('hho','bbo'));  //bboijvns
    //7、str.repeat(count):将字符串重复多少次，count是次数
    console.log('*'.repeat(4));  //'****'
    console.log('xy'.repeat(3));  //'xyxyxy'
    //8、str.tirm():去除字符串两端的连续空格
    console.log('    kimfkv     '.trim());  //kimfkv
    //9、str.split('特殊字符',limit):将字符串用特殊字符进行分割，返回一个新数组
    //limit:分割后，取出多少个
    let str = 'ab&cd&mn'
    console.log(str.split('&'));  //[ab,cd,mn]
    console.log(str.split('&',2));  //[ab,cd]
    //封装一个函数，实现隐藏手机号中间四位
    function phone(num){
        num = num.substring(0,3) + '****' + num.substring(7)
        console.log(num);
    }
    let num = '15836428951'
    phone(num)
    //- 封装一个函数，实现字符串首字母大写，其他字母都转小写 
    function A(a){
        a = a.charAt().toUpperCase() + a.substring(1).toLowerCase()
        console.log(a);
    }
    let a = 'jnsnKNJD'
    A(a)


    //数组常用内置函数
    let arr = [1,2,3]
    //可变方法
    //1、push():将一个或多个元素添加到数组的末尾，并返回数组的新长度
    console.log(arr.push(4)); //4    打印的是数组的新长度 
    console.log(arr);   //[1,2,3,4]
    //2、unshift():将一个或多个元素添加到数组的开头，并返回数组的新长度
    console.log(arr.unshift(0));  //5    打印的是数组的新长度
    console.log(arr);  //[0,1,2,3,4]
    //3、pop():删除数组的最后一个元素，并返回该元素的值
    console.log(arr.pop());  //4
    //5、shift():删除数组的第一个元素，并返回该元素的值
    console.log(arr.shift());  //0
    //6、reverse():将数组元素进行翻转
    console.log(arr.reverse());  //[3,2,1]
    //7、splice():1.删除数组元素[主要作用]；2.删除元素并替换
    let users = ['张三','李四','王五','老六','赵八']
    users.splice(1,1)  //从下标1开始删，删一个
    console.log(users);  //['张三','王五','老六','赵八']
    users.splice(0,2,'刘二')  //从下标0开始删，删2个，并替换成刘二
    console.log(users);  //['刘二','老六','赵八']
    //8、sort():实现数组排序
    let arr1 = [15,23,14,12,10,85,64,48]
    arr1.sort(function(a,b){
        //前者减去后者是升序
        //后者减去前者是降序
        return a - b
    })
    console.log(arr1);  //[10, 12, 14, 15, 23, 48, 64, 85]
    //需求：班上的同学，按照身高升序
    let user = [
        { name: '王宁', height: 160 },
        { name: '王慧', height: 170 },
        { name: '黄骞', height: 180 },
        { name: '汪哥', height: 176 },
        { name: '凡凡', height: 188 },
    ]
    user.sort(function(obj1,obj2){
        return obj1.height - obj2.height
    })
    console.log(user);

    //不可变方法
    //1、concat():合并数组，返回合并后的新数组
    let x = [1,2]
    let y = [3,4]
    console.log(x.concat(y));  //[1,2,3,4] 
    //2、includes():判断数组中是否存在某个元素
    let z = [5,6,7,8]
    console.log(z.includes(3));  //false
    console.log(z.includes(6));  //true
    //3、indexOf():返回元素首次在数组出现时的下标，若元素不存在返回-1
    console.log(z.indexOf(7));  //2
    console.log(z.indexOf(2));  //-1
    //4、slice(indexStart,indexEnd):截取指定下标范围的数组元素,不包含末尾下标元素
    let msg = ['html','css','js基础','js高级','pc项目']
    console.log(msg.slice(1,4));  //['css','js基础','js高级']
    console.log(msg.slice(3));  //['js高级','pc项目']  不写末尾下标，默认截取到最后
    //5、join():用特定字符将数组元素连接在一起，返回连接后的字符串(字符串split方法的逆操作)
    console.log(msg.join('-'));  //html-css-js基础-js高级-pc项目
</script>